var prevPageToken = null;
var nextPageToken = null;
var currentPageToken = null;


/* 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
function loadYouTubeVideoList() {

    var paramsMap = {'part': part = 'id%2Csnippet%2CcontentDetails',
        'maxResults': 3,
        'playlistId': youtubePlayListId};
    if (currentPageToken !== null) {
        paramsMap['pageToken'] = currentPageToken;
    }

    // Hace la solicitud al api
    var response = youtubeApiRequest('playlistItems', paramsMap);
    //alert(response.responseText);

    // procesa la respuesta
    nextPageToken = response.jsonObject.nextPageToken;
    if (nextPageToken === undefined) {
        nextPageToken = null;
    }
    prevPageToken = response.jsonObject.prevPageToken;
    if (prevPageToken === undefined) {
        prevPageToken = null;
    }

    setUpYouTubePaginator();

    // Recorre todos los videos
    var i = 0;
    jQuery("#videos ul").html("");
    while (response.jsonObject.items[i] !== undefined) {
        var video = response['jsonObject'].items[i];
        videoUrl = "http://www.youtube.com/watch?v=" + video.contentDetails.videoId;
        videoLi = $('<li></li>');
        videoLi.attr('videourl', videoUrl);
        videoLi.click(function() {
            url = $(this).attr('videourl');
            var ref = window.open(url, '_blank', 'EnableViewPortScale=yes');
            //ref.close();
        });
        videoLi.html('<a href="#"><img heigth="120px" src="' + video.snippet.thumbnails.medium.url + '"  class="thumbnail"/></a>');
        i++;
        // Pone el video
        jQuery("#videos ul").append(videoLi);
    }
}

/**
 * Hace visibiles o invisibles los botones del paginador de videos
 * @returns {undefined}
 */
function setUpYouTubePaginator() {
    if (prevPageToken === null) {
        jQuery("#videos .retro").hide();
    } else {
        jQuery("#videos .retro").show();
    }

    if (nextPageToken === null) {
        jQuery("#videos .avanz").hide();
    } else {
        jQuery("#videos .avanz").show();
    }
}


/**
 * apiRequest
 * @param String apiCommand
 * @param paramsMap Objecto con los parámetros a enviar al api
 * @param onResponseFunction Función para ejecutar cuando haya respuesta
 * @returns api command json response
 */
function youtubeApiRequest(apiCommand, paramsMap) {

    var response = {'jsonObject': null, 'errorMsg': null, 'responseText': null};

    // build url api request
    var url = "https://www.googleapis.com/youtube/v3/";
    url = url + apiCommand + '?';
    for (var name in paramsMap) {
        url = url + "&" + name + '=' + paramsMap[name];
    }
    url = url + "&key=" + googleApiKey;
    //alert(url);

    // Hace el post
    try {
        var xmlHttp = new XMLHttpRequest();
        xmlHttp.open("GET", url, false);
        xmlHttp.send(null);
    } catch (e) {
        response['errorMsg'] = 'No hay respuesta del servidor';
        return response;
    }

    // Carga el código de respuesta
    try {
        var responseStr = xmlHttp.responseText;
        response['jsonObject'] = jQuery.parseJSON(responseStr);
        response['responseText'] = responseStr;
        //alert(responseStr);
    } catch (e) {
        response['jsonObject'] = null;
        response['errorMsg'] = 'Formato de respuesta inesperado';
        return response;
    }

    // Retorna la respuesta
    return response;
}

/**
 * Avanza hacia atrás en la galeria de flickr
 * @returns {undefined}
 */
function goPrevYoutubeGalleryPage() {
    if (prevPageToken !== null) {
        currentPageToken = prevPageToken;
        loadYouTubeVideoList();
    }
}

/**
 * Avanza hacia adelante en la galeria de flickr
 * @returns {undefined}
 */
function goNextYoutubeGalleryPage() {
    if (nextPageToken !== null) {
        currentPageToken = nextPageToken;
        loadYouTubeVideoList();
    }
}
